#pragma once
#include "CTransform.h"
#include "CMILMatrix.h"

class CDependencyObject;
class CREATEPARAMETERS;
class CDependencyProperty;
class CNoParentShareableDependencyObject;
class CRenderTarget;
class CValue;

class CCompositeTransform :
	public CTransform
{

protected: 
	CCompositeTransform(const CCompositeTransform & original, HRESULT & hr);
private: 
	CCompositeTransform(CCoreServices * pCore);
public: 
	static HRESULT Create(CDependencyObject * * ppObject, CREATEPARAMETERS * pCreate);
	virtual XUINT32 GetTypeIndex() const;
	virtual HRESULT SetValue(CDependencyProperty * pdp, CValue * pValue);
	virtual HRESULT Clone(CNoParentShareableDependencyObject * * ppClone);
	virtual HRESULT CloneForTarget(CRenderTarget * pRenderTarget, CTransform * * ppTransform);
	virtual void GetTransform(CMILMatrix * pMatrix);
	static void NWSetDirty(CDependencyObject * pTarget, enum DirtyFlags::Value flags);
	struct XPOINTF m_ptCenter;  
	
	XFLOAT m_eScaleX;
	XFLOAT m_eScaleY;
	XFLOAT m_eSkewX;
	XFLOAT m_eSkewY;
	XFLOAT m_eRotation; 
	XFLOAT m_eTranslateX;
	XFLOAT m_eTranslateY;
private: 
	CMILMatrix m_compositeMatrix;
	XUINT32 m_fDirty;
};